using System.Collections.ObjectModel;
using System.ComponentModel.DataAnnotations;
using System.Runtime.Serialization;

namespace FU.Capstones.IMS.Web.Common.InventoryServiceProxy.DataContracts
{
    [DataContract(Namespace = WebConstants.ServiceNamespace)]
    public class Role : BindingModelBase<Role>
    {
        public Role()
        {
            AddAllAttributeValidators();
        }

        private int roleID;
        [Key]
        [DataMember]
        public int RoleID
        {
            get { return roleID; }
            set
            {
                if (!Equals(roleID, value))
                {
                    roleID = value;
                    RaisePropertyChanged(() => RoleID);
                }
            }
        }
        
        private string roleCode;
        [DataMember]
        [Required(AllowEmptyStrings = false, ErrorMessage = "Mã chức vụ không đưọc bỏ trống.")]
        [StringLength(10, ErrorMessage = "Mã chức vụ không dài quá 10 kí tự.")]
        public string RoleCode
        {
            get { return roleCode; }
            set
            {
                if (!ReferenceEquals(roleCode, value))
                {
                    roleCode = value;
                    RaisePropertyChanged(() => RoleCode);
                }
            }
        }

        private string roleName;
        [DataMember]
        [Required(AllowEmptyStrings = false, ErrorMessage = "Tên chức vụ không được để trống.")]
        [StringLength(20, ErrorMessage = "Tên chức vụ không dài quá 20 kí tự.")]
        public string RoleName
        {
            get { return roleName; }
            set
            {
                if (!ReferenceEquals(roleName, value))
                {
                    roleName = value;
                    RaisePropertyChanged(() => RoleName);
                }
            }
        }

        public string RoleNameSearch
        {
            get { return roleName; }
            set
            {
                if (!ReferenceEquals(roleName, value))
                {
                    roleName = value;
                    RaisePropertyChanged(() => RoleNameSearch);
                }
            }
        }

        private string briefDescription;
        [DataMember]
        [Required(AllowEmptyStrings = false, ErrorMessage = "Miêu tả vắn tắt không đưọc bỏ trống.")]
        [StringLength(500, ErrorMessage = "Miêu tả vắn tắt không dài quá 500 kí tự.")]
        public string BriefDescription
        {
            get { return briefDescription; }
            set
            {
                if (!ReferenceEquals(briefDescription, value))
                {
                    briefDescription = value;
                    RaisePropertyChanged(() => BriefDescription);
                }
            }
        }

        private string fullDescription;
        [DataMember]
        [Required(AllowEmptyStrings = false, ErrorMessage = "Miêu tả đầy đủ không đưọc bỏ trống.")]
        [StringLength(4000, ErrorMessage = "Miêu tả đầy đủ không dài quá 4000 kí tự.")]
        public string FullDescription
        {
            get { return fullDescription; }
            set
            {
                if (!ReferenceEquals(fullDescription, value))
                {
                    fullDescription = value;
                    RaisePropertyChanged(() => FullDescription);
                }
            }
        }

        private bool isDelete;
        [DataMember]
        public bool IsDelete
        {
            get { return isDelete; }
            set
            {
                if (!Equals(isDelete, value))
                {
                    isDelete = value;
                    RaisePropertyChanged(() => IsDelete);
                }
            }
        }
        private ObservableCollection<int> authorizationCollection;
        [DataMember]
        public ObservableCollection<int> AuthorizationCollection
        {
            get { return authorizationCollection; }
            set
            {
                if (!ReferenceEquals(authorizationCollection, value))
                {
                    authorizationCollection = value;
                    RaisePropertyChanged(() => AuthorizationCollection);
                }
            }
        }
        
    }
}